perm filename CALIB.SAI[LOU,BGB] blob
sn#006790 filedate 1974-12-08 generic text, type T, neo UTF8
00100 BEGIN "CALIB"
00200 EXTERNAL PROCEDURE ARM_JOINT;
00300 REQUIRE "VECTOR.SAI[SYS,HE]" SOURCE_FILE;
00400 REQUIRE "INTFAC.REL[SYS,HE]" LOAD_MODULE;
00500 INTEGER J,I,BREAK,EOF;
00600 REAL R;
00700 INTERNAL INTEGER ARRAY ARM_VECTOR[1:7];
00800 REAL ARRAY POINTS [1:4];
00900 PRELOAD_WITH -1.322907, 0.951153, 5.956624,-1.523938, 1.270145,-1.576950;
01000 REAL ARRAY CSCALE[1:6];
01100 PRELOAD_WITH 2.327725,-4.252370, 2.573889, 3.388225,-2.919922, 4.413422;
01200 REAL ARRAY OFF[1:6];
01300 LABEL NEXT;
01400 STRING S,RF;
01500 DEFINE TTY="1",TYPE="OUTSTR(",STAR="&CRLF);OUTSTR(""*"")";
01600 DEFINE EOM=")";
01700 DEFINE HEAD="1",ID="2";
01800 SETBREAK(HEAD,"ABCDEFGHIJKLMNOPQRSTUVWXYZ",NULL,"INR");
01900 SETBREAK(ID,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_",NULL,"XN");
02000 OPEN(TTY,"TTY",0,2,0,120,BREAK,EOF);
02100 OPEN(2,"DSK",0,0,2,128,BREAK,EOF);
02200 OPEN(5,"DSK",0,2,0,128,BREAK,EOF);
02300 WHILE TRUE DO BEGIN
02400 TYPE "RECORD FILE NAME" STAR;
02500 INPUT(TTY,HEAD);RF←INPUT(TTY,ID)&".REC";
02600 LOOKUP(5,RF,EOF);
02700 IF EOF THEN BEGIN ENTER(2,RF,EOF);DONE END;
02800 TYPE"FILE ALREADY EXISTS, DELETE Y, CONCATENTATE C ?" STAR;
02900 INPUT(TTY,HEAD);S←INPUT(TTY,ID);
03000 IF S="C" THEN BEGIN
03100 ENTER(2,RF,EOF);
03200 DO BEGIN S←INPUT(5,0);
03300 OUT(2,S);
03400 END UNTIL EOF;
03500 DONE;
03600 END;
03700 IF S="Y" THEN BEGIN
03800 ENTER(2,RF,EOF);
03900 DONE;
04000 END;
04100 END;
04200 WHILE TRUE DO BEGIN "MAIN"
04300 TYPE NULL STAR;
04400 J←INTIN(TTY);
04500 IF ¬J THEN DONE;
04600 IF J<1 ∨ J>6 THEN
04700 BEGIN"CLOSE"
04800 CLOSE (5);
04900 CLOSE(2);
05000 LOOKUP(5,RF,EOF);
05100 ENTER(2,RF,EOF);
05200 DO BEGIN S←INPUT(5,0);
05300 OUT(2,S);
05400 END UNTIL EOF;
05500 GO TO NEXT;
05600 END "CLOSE";
05700 ARM_JOINT;
05800 IF ARM_VECTOR[J]<'100+1000 ∨ ARM_VECTOR[J]>'17700+1000 THEN TYPE "JOINT OUT OF RANGE" EOM ELSE BEGIN "GOOD"
05900 SETFORMAT(4,0);
06000 OUT(2,CVS(J));
06100 SETFORMAT(10,0);
06200 OUT(2,S←CVS(ARM_VECTOR[J]));
06300 SETFORMAT(12,2);
06400 R←OFF[J]+CSCALE[J]*ARM_VECTOR[J]/'4000;
06500 IF J≠3 THEN R←R*RAD;
06600 TYPE CVF(R) EOM;
06700 IF J=1 THEN BEGIN "ONE"
06800 FOR I←1 STEP 1 UNTIL 4 DO BEGIN
06900 POINTS[I]←REALIN(TTY);
07000 OUT(2,CVF(POINTS[I]));
07100 END;
07200 S←S&CVF(RAD*ATAN2(POINTS[4]-POINTS[2],POINTS[3]-POINTS[1]));
07300 END "ONE" ELSE OUT(2,CVF(REALIN(TTY)));
07400 OUT(2,CRLF);
07500 TYPE S EOM;
07600 END "GOOD";
07700 NEXT:END"MAIN";
07800 RELEASE(5);
07900 RELEASE(2);
08000 END;